extends Node

#我们使用 @export var mob_scene: PackedScene 来允许我们选择要实例化的 Mob 场景
@export var mob_scene:PackedScene
var score

func _ready() -> void:
	pass	#new_game()

func game_over() -> void:
	$ScoreTimer.stop()
	$MobTimer.stop()
	$Music.stop()#停止播放游戏音乐
	$DeathSound.play()#播放游戏结束音乐
	$HUD.show_game_over()
	
	
func new_game():
	score = 0
	
	$Player.start($StartPosition.position)
	$StartTimer.start()
	$HUD.update_score(score)
	get_tree().call_group("mobs","queue_free")#call_group() 函数调用组中每个节点上的删除函数——让每个怪物删除其自身。
	$Music.play()#播放游戏音乐
	$HUD.show_message("准备开始")


func _on_mob_timer_timeout() -> void:
	#创建Mob场景的新实例。
	var mob = mob_scene.instantiate()
	
	#在Path2D上随机选择一个位置。
	var mob_spawn_location = $MobPath/MobSpawnLocation
	mob_spawn_location.progress_ratio = randf()
	
	#为什么要用 PI？在需要传入角度的函数中，Godot 使用的是弧度而不是度数。
	#圆周率（Pi）表示转半圈的弧度，约为 3.1415（还提供了等于 2 * PI 的 TAU）。
	#如果你更喜欢使用度数，则需使用 deg_to_rad() 和 rad_to_deg() 函数在这两种单位之间进行转换。
	#将mob的方向设置为垂直于路径方向。
	var direction = mob_spawn_location.rotation + PI / 2
	
	#将mob的位置设置为随机位置。
	mob.position = mob_spawn_location.position
	
	#为方向添加一些随机性。
	direction += randf_range(-PI / 4, PI / 4)
	mob.rotation = direction
	
	#为mob选择速度。
	var velocity = Vector2(randf_range(150.0, 250.0), 0.0)
	mob.linear_velocity = velocity.rotated(direction)
	
	#通过将其添加到主场景来生成mob。
	add_child(mob)


func _on_score_timer_timeout() -> void:
	score += 1
	$HUD.update_score(score)
	

func _on_start_timer_timeout() -> void:
	$MobTimer.start()
	$ScoreTimer.start()
	


func _on_hud_start_game() -> void:
	pass # Replace with function body.
